#pragma once

#include<iostream>
#include<string>
#include<sstream>
#include <sys/types.h>
#include <sys/stat.h>
#include <cerrno>
#include"Until.hpp"

using namespace std;
const string SEP="\r\n";
const string default_path="./wwwroot";
const string home_page="index.html";
const string html_404="wwwroot/404.html";
class HttpRequest
{
public:
HttpRequest(){}

~HttpRequest(){}


void parse()
{
//1. 从inbuffer内拿到第一行数据
string line=Until::getOneline(_inbuffer,SEP);
if(line.empty()) return;
//2.从line中提取三个字段
stringstream ss(line);//
ss>>_method>>_url>>_httpversion;
//3.添加默认路径
_path+=default_path;
_path+=_url;//如果客户端没有要求打开任何路径，那么该url为空

if(_path[_path.size()-1]=='/') _path+=home_page;//如果没选定路径默认进首页

//4.找到资源的后缀
auto pos =_path.find(".");
if(pos==std::string::npos)
{
    _suffix=".html";//没找到默认文件后缀为.html
}else
{
    _suffix=_path.substr(pos);
}

//5.获取文件内容的大小
struct stat st;
int n=stat(_path.c_str(),&st);
if(n==0)
{
_size=st.st_size;//定义了size就必须获取，否则浏览器默认行为是下载
}else
{
    _size=-1;
}

}

public:
string _inbuffer;
string _method;
string _url;//
string _httpversion;//版本
string _path;//路径
string _suffix;
int _size=0;//文件内容的大小

};

class HttpResponse
{
public:
    std::string _outbuffer;
};